#ifndef LIENZOJUEGO_H
#define	LIENZOJUEGO_H

#include <gtkmm-3.0/gtkmm/drawingarea.h>
#include <string>
#include "Mutex.h"
#include "Dibujador.h"
#include "Partida.h"
#include "../Cliente/Cliente.h"
#include "Posicion.h"

using namespace std;
using namespace TP::Juego;
using namespace TP::Juego::Arena::Actores;
using namespace TP::Comunicacion;
using namespace TP::Threading;

class LienzoJuego : public Gtk::DrawingArea {
private:

    Dibujador* _dibujador;
    Cliente* _cliente;
    Partida* _partida;
    Mutex _mutex;

    // Pajaros
    Glib::RefPtr<Gdk::Pixbuf> _imagenPajaroRojo;
    Glib::RefPtr<Gdk::Pixbuf> _imagenPajaroVerde;
    Glib::RefPtr<Gdk::Pixbuf> _imagenPajaroAzul;

    // Cerdito
    Glib::RefPtr<Gdk::Pixbuf> _imagenCerdito;

    // Huevos
    Glib::RefPtr<Gdk::Pixbuf> _imagenHuevoPoche;
    Glib::RefPtr<Gdk::Pixbuf> _imagenHuevoReloj;
    Glib::RefPtr<Gdk::Pixbuf> _imagenHuevoCodorniz;
    Glib::RefPtr<Gdk::Pixbuf> _imagenHuevoBlanco;

    // Cajas
    Glib::RefPtr<Gdk::Pixbuf> _imagenCajaMadera;
    Glib::RefPtr<Gdk::Pixbuf> _imagenCajaMetal;
    Glib::RefPtr<Gdk::Pixbuf> _imagenCajaVidrio;

    // Catapulta
    Glib::RefPtr<Gdk::Pixbuf> _imagenCatapulta;

    // Monticulo de huevos
    Glib::RefPtr<Gdk::Pixbuf> _imagenMonticuloHuevos;

    // Frutas
    Glib::RefPtr<Gdk::Pixbuf> _imagenManzana;
    Glib::RefPtr<Gdk::Pixbuf> _imagenBanana;
    Glib::RefPtr<Gdk::Pixbuf> _imagenCereza;

    // Imagen de fondo
    Glib::RefPtr<Gdk::Pixbuf> _fondo;

    void _DibujarPiso(const std::vector<Posicion*>& vectorPosiciones);

protected:
    virtual bool on_draw(const Cairo::RefPtr<Cairo::Context>& context);
    virtual bool on_timeout();
    virtual bool on_button_press_event(GdkEventButton* event);

public:
    LienzoJuego(Cliente* cliente, float fps);

    void SetImagenPajaroRojo(std::string pathImagen);
    void SetImagenPajaroVerde(std::string pathImagen);
    void SetImagenPajaroAzul(std::string pathImagen);

    void SetImagenCerdito(std::string pathImagen);

    void SetImagenHuevoPoche(std::string pathImagen);
    void SetImagenHuevoReloj(std::string pathImagen);
    void SetImagenHuevoCodorniz(std::string pathImagen);
    void SetImagenHuevoBlanco(std::string pathImagen);

    void SetImagenCajaMadera(std::string pathImagen);
    void SetImagenCajaMetal(std::string pathImagen);
    void SetImagenCajaVidrio(std::string pathImagen);

    void SetImagenCatapulta(std::string pathImagen);

    void SetImagenMonticuloHuevos(std::string pathImagen);

    void SetImagenManzana(std::string pathImagen);
    void SetImagenBanana(std::string pathImagen);
    void SetImagenCereza(std::string pathImagen);

    void SetImagenFondo(std::string pathImagen);

    void SetPartida(Partida* partida);

    virtual ~LienzoJuego();
};

#endif	/* LIENZOJUEGO_H */